{
 "cells": [
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## 主成分分析（PCA） principle Component Analysis\n",
    "\n",
    "在PCA 中，数据从原来的坐标系转到了新的坐标系。\n",
    "* 第一个新坐标轴选择的是原始数据中方差最大的方向\n",
    "* 第二个新的坐标轴选择的是和第一个坐标轴正交且具有最大方法的方向，该过程一直重复（重复次数为特征数）"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### 伪代码：\n",
    "* 去除平均值\n",
    "* 计算协方差矩阵\n",
    "* 计算协方差矩阵的特征值和特征向量\n",
    "* 将特征值从大到小排序\n",
    "* 保留最上面的 N 个特征向量\n",
    "* 将数据转换到上述 N 个特征向量构建的新空间中"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 4,
   "metadata": {
    "scrolled": true
   },
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "meanVals: [[9.06393644 9.09600218]]\n",
      "meanRemoved: [[ 1.17124956  2.22599482]\n",
      " [ 1.05840256  2.71499082]\n",
      " [ 0.12629956 -0.19105918]\n",
      " ...\n",
      " [ 0.79098556  0.10539082]\n",
      " [ 0.05064356  0.03821282]\n",
      " [ 1.27096256 -0.55239818]]\n",
      "covMat: [[1.05198368 1.1246314 ]\n",
      " [1.1246314  2.21166499]]\n",
      "eigVals: [0.36651371 2.89713496]\n",
      "eigVects: [[-0.85389096 -0.52045195]\n",
      " [ 0.52045195 -0.85389096]]\n",
      "eigValInd: [0 1] <class 'numpy.ndarray'>\n",
      "eigValInd: [1]\n",
      "redEigVects: [[-0.52045195]\n",
      " [-0.85389096]]\n",
      "[[-2.51033597e+00]\n",
      " [-2.86915379e+00]\n",
      " [ 9.74108510e-02]\n",
      " [-7.67782222e-01]\n",
      " [ 1.02715333e+00]\n",
      " [-1.44409178e+00]\n",
      " [-2.17360352e+00]\n",
      " [-7.73998803e-01]\n",
      " [-1.09983463e+00]\n",
      " [-1.70275987e+00]\n",
      " [-5.39605615e-01]\n",
      " [-9.15572638e-01]\n",
      " [-2.42669452e+00]\n",
      " [ 2.93613464e+00]\n",
      " [ 3.92702506e-01]\n",
      " [ 2.59205734e+00]\n",
      " [ 4.96435625e-01]\n",
      " [-1.52069930e+00]\n",
      " [ 1.25471104e-01]\n",
      " [ 1.41846162e+00]\n",
      " [ 5.89902904e-01]\n",
      " [ 6.69601540e-01]\n",
      " [ 3.25466068e-01]\n",
      " [ 1.18812333e+00]\n",
      " [ 2.07790920e+00]\n",
      " [ 3.24938650e-01]\n",
      " [ 3.41109884e+00]\n",
      " [ 1.92249899e+00]\n",
      " [-6.57788287e-01]\n",
      " [-3.56836313e-01]\n",
      " [ 5.72240108e-02]\n",
      " [ 1.13444036e+00]\n",
      " [-2.47196176e-01]\n",
      " [ 1.14678135e+00]\n",
      " [ 1.62503940e+00]\n",
      " [-2.11489136e+00]\n",
      " [ 1.62262452e+00]\n",
      " [ 1.56716102e+00]\n",
      " [ 2.08128929e+00]\n",
      " [-1.87248397e+00]\n",
      " [-2.59122644e-01]\n",
      " [ 3.27554269e+00]\n",
      " [-5.23125148e-01]\n",
      " [-9.49849182e-02]\n",
      " [ 2.36167252e+00]\n",
      " [-2.44575766e+00]\n",
      " [ 7.38351339e-01]\n",
      " [ 4.57201959e-01]\n",
      " [-1.41699869e+00]\n",
      " [-5.32635883e-01]\n",
      " [ 1.02282596e+00]\n",
      " [-1.12875453e+00]\n",
      " [-7.13211110e-01]\n",
      " [-3.38626446e+00]\n",
      " [ 3.56810812e-02]\n",
      " [ 1.23323789e+00]\n",
      " [ 1.91755358e-01]\n",
      " [ 1.73904540e+00]\n",
      " [-3.03423471e-01]\n",
      " [ 3.77647206e+00]\n",
      " [-5.81375052e-01]\n",
      " [ 1.79991218e-02]\n",
      " [-3.79395293e-01]\n",
      " [-2.34332814e+00]\n",
      " [-2.79028309e+00]\n",
      " [-7.42478770e-01]\n",
      " [ 3.32781960e-01]\n",
      " [-1.73923519e+00]\n",
      " [-3.23978914e-01]\n",
      " [ 1.87628361e+00]\n",
      " [ 1.13600716e+00]\n",
      " [ 3.71821790e+00]\n",
      " [ 2.98795377e-01]\n",
      " [-2.15069022e-01]\n",
      " [ 1.86189180e+00]\n",
      " [ 9.03742077e-01]\n",
      " [ 6.91749081e-01]\n",
      " [-1.50047299e+00]\n",
      " [-1.05497444e+00]\n",
      " [ 5.19689141e-01]\n",
      " [ 7.62938979e-01]\n",
      " [ 2.14058040e+00]\n",
      " [-2.81440019e+00]\n",
      " [ 2.36346352e+00]\n",
      " [ 1.56402005e+00]\n",
      " [ 3.39072385e-01]\n",
      " [-3.01657993e+00]\n",
      " [ 1.04787558e+00]\n",
      " [-7.92653343e-01]\n",
      " [-1.44976069e+00]\n",
      " [ 2.19344433e+00]\n",
      " [ 6.38752997e-02]\n",
      " [-3.03560416e+00]\n",
      " [ 5.80258997e-01]\n",
      " [-1.03294677e+00]\n",
      " [-4.06263150e-01]\n",
      " [-7.71705258e-01]\n",
      " [-1.07904354e+00]\n",
      " [-9.57210091e-02]\n",
      " [-1.76385675e+00]\n",
      " [-2.33470825e-01]\n",
      " [-2.61831197e+00]\n",
      " [-1.36320190e+00]\n",
      " [-9.04417393e-01]\n",
      " [ 2.19534328e+00]\n",
      " [ 3.23696800e+00]\n",
      " [-1.17484616e+00]\n",
      " [ 2.28103017e+00]\n",
      " [ 4.85221802e-01]\n",
      " [-3.52914508e-01]\n",
      " [-1.12942177e+00]\n",
      " [-2.58533840e-01]\n",
      " [-1.51362380e+00]\n",
      " [ 2.74226802e+00]\n",
      " [ 9.44755793e-01]\n",
      " [-1.96796286e+00]\n",
      " [ 2.04241744e+00]\n",
      " [ 2.94432626e+00]\n",
      " [-6.52031649e-01]\n",
      " [ 1.05496814e-01]\n",
      " [ 2.34907974e+00]\n",
      " [ 6.35084594e-01]\n",
      " [ 8.21233548e-02]\n",
      " [-1.25023068e+00]\n",
      " [ 1.53669072e+00]\n",
      " [-1.62396831e+00]\n",
      " [ 1.46974307e+00]\n",
      " [-1.81787653e+00]\n",
      " [-1.27348362e+00]\n",
      " [-1.45072614e+00]\n",
      " [ 1.28318570e+00]\n",
      " [ 7.88120021e-01]\n",
      " [ 1.28183580e+00]\n",
      " [ 1.31518762e-01]\n",
      " [ 1.74532342e+00]\n",
      " [-1.16566093e+00]\n",
      " [-3.46926311e-01]\n",
      " [ 3.34853433e-01]\n",
      " [-4.89017300e-01]\n",
      " [ 9.54194625e-01]\n",
      " [-1.97872327e+00]\n",
      " [ 1.72393836e+00]\n",
      " [-1.53924505e+00]\n",
      " [ 3.38847058e-01]\n",
      " [ 1.98578308e+00]\n",
      " [-1.10658540e+00]\n",
      " [-2.22493118e+00]\n",
      " [-2.28363824e-01]\n",
      " [-3.11210520e-01]\n",
      " [ 8.79513451e-01]\n",
      " [ 3.53302123e-01]\n",
      " [-8.25473961e-01]\n",
      " [ 1.60085214e+00]\n",
      " [-2.70164885e+00]\n",
      " [ 1.02362306e+00]\n",
      " [ 8.29051360e-01]\n",
      " [ 1.62794085e-01]\n",
      " [ 3.96211949e+00]\n",
      " [ 2.90104679e-01]\n",
      " [-2.35316382e+00]\n",
      " [ 7.65752344e-01]\n",
      " [ 5.12885212e-01]\n",
      " [ 4.73898120e+00]\n",
      " [-2.37977901e+00]\n",
      " [ 3.77423573e+00]\n",
      " [-7.49181572e-01]\n",
      " [-5.01696499e-01]\n",
      " [-2.05346503e+00]\n",
      " [-1.52949423e+00]\n",
      " [ 1.59440344e+00]\n",
      " [ 1.88034865e+00]\n",
      " [ 1.26786591e+00]\n",
      " [ 1.04910024e+00]\n",
      " [ 4.86457431e-01]\n",
      " [-8.77268948e-01]\n",
      " [-2.29259159e+00]\n",
      " [ 5.72077743e-01]\n",
      " [ 1.47752868e+00]\n",
      " [-1.03770630e+00]\n",
      " [ 4.82659602e-01]\n",
      " [-7.22302862e-01]\n",
      " [-8.76979193e-01]\n",
      " [-2.39279773e+00]\n",
      " [ 3.40696206e+00]\n",
      " [ 1.04558703e+00]\n",
      " [ 3.27728202e-01]\n",
      " [ 2.53799818e+00]\n",
      " [-1.51577259e+00]\n",
      " [-1.51398220e+00]\n",
      " [ 1.95340851e+00]\n",
      " [ 4.42021707e-01]\n",
      " [ 2.91236712e+00]\n",
      " [-4.40714394e-01]\n",
      " [ 1.89070073e+00]\n",
      " [ 1.06510129e+00]\n",
      " [-3.03569677e+00]\n",
      " [ 6.82066736e-01]\n",
      " [ 6.15556391e-01]\n",
      " [-1.27272219e+00]\n",
      " [ 2.66634301e+00]\n",
      " [-6.69520698e-01]\n",
      " [-5.90427420e-01]\n",
      " [-6.66474162e-01]\n",
      " [ 2.10739858e-01]\n",
      " [-2.21920390e+00]\n",
      " [ 1.30083926e+00]\n",
      " [-1.59972048e+00]\n",
      " [-9.23471652e-01]\n",
      " [ 1.97515543e+00]\n",
      " [-1.44930936e+00]\n",
      " [ 9.59701556e-01]\n",
      " [-2.57239968e+00]\n",
      " [ 3.21841789e+00]\n",
      " [-7.29746239e-01]\n",
      " [-1.57406350e+00]\n",
      " [ 5.94708677e-01]\n",
      " [-8.75360499e-01]\n",
      " [-8.54425791e-02]\n",
      " [ 6.68120003e-01]\n",
      " [ 1.98511875e+00]\n",
      " [ 9.80940951e-01]\n",
      " [-1.56600318e-01]\n",
      " [ 1.31478513e+00]\n",
      " [ 1.02057974e+00]\n",
      " [ 3.30766608e-01]\n",
      " [-1.01342792e+00]\n",
      " [-1.80282399e+00]\n",
      " [-1.05351271e+00]\n",
      " [-1.11281913e+00]\n",
      " [ 2.65376731e+00]\n",
      " [ 1.77829535e+00]\n",
      " [ 9.68961257e-01]\n",
      " [ 1.34633444e+00]\n",
      " [-1.84549808e+00]\n",
      " [-4.20727517e-01]\n",
      " [ 6.68671526e-01]\n",
      " [ 9.83491050e-01]\n",
      " [ 3.32521819e-01]\n",
      " [-1.05044108e+00]\n",
      " [ 2.19962593e+00]\n",
      " [-2.36473453e-01]\n",
      " [-4.93226797e-01]\n",
      " [-7.38214593e-01]\n",
      " [-4.51814951e+00]\n",
      " [-3.30691882e+00]\n",
      " [-9.78464894e-01]\n",
      " [ 3.22997258e-01]\n",
      " [-2.15629547e+00]\n",
      " [ 8.79965866e-01]\n",
      " [ 3.18534960e+00]\n",
      " [ 1.08728955e+00]\n",
      " [ 7.57690755e-01]\n",
      " [ 1.10098421e+00]\n",
      " [-3.71114599e+00]\n",
      " [-2.37970615e+00]\n",
      " [-1.54934939e+00]\n",
      " [-5.65582172e-01]\n",
      " [-1.23569163e+00]\n",
      " [-1.42276872e+00]\n",
      " [-1.41868090e+00]\n",
      " [ 1.18857028e+00]\n",
      " [-2.81500445e+00]\n",
      " [-5.50925161e-01]\n",
      " [ 1.97663859e-01]\n",
      " [ 2.45198721e-01]\n",
      " [ 1.51629158e+00]\n",
      " [-4.75014758e-01]\n",
      " [-1.35982988e+00]\n",
      " [-3.90584730e+00]\n",
      " [-1.73530199e+00]\n",
      " [ 1.74625720e+00]\n",
      " [-1.75898823e-01]\n",
      " [-2.74434375e+00]\n",
      " [-1.17493768e+00]\n",
      " [-8.69634992e-01]\n",
      " [-3.15766059e+00]\n",
      " [-4.02276921e-01]\n",
      " [-4.73951109e-01]\n",
      " [-2.62347768e+00]\n",
      " [ 8.56835766e-01]\n",
      " [-4.23293757e-01]\n",
      " [-1.92596011e+00]\n",
      " [-1.80764185e+00]\n",
      " [-3.85432273e-01]\n",
      " [ 1.84393569e+00]\n",
      " [ 1.08529197e+00]\n",
      " [ 9.41611091e-01]\n",
      " [ 1.16719075e+00]\n",
      " [ 3.00844881e-01]\n",
      " [ 3.02191697e-01]\n",
      " [-7.35299979e-01]\n",
      " [-1.25824541e-01]\n",
      " [-1.34598761e+00]\n",
      " [-1.07192842e+00]\n",
      " [ 1.82551672e+00]\n",
      " [ 7.18656998e-01]\n",
      " [ 1.33497774e+00]\n",
      " [-9.77862491e-01]\n",
      " [-5.51134719e-01]\n",
      " [ 1.60238963e+00]\n",
      " [-7.68601439e-02]\n",
      " [-2.28237276e+00]\n",
      " [ 5.25412061e-01]\n",
      " [-1.48110459e+00]\n",
      " [ 2.72120356e-01]\n",
      " [-3.69154640e+00]\n",
      " [ 2.26389094e+00]\n",
      " [ 4.73652776e+00]\n",
      " [ 1.54663062e+00]\n",
      " [-4.27749708e-01]\n",
      " [ 7.26314562e-01]\n",
      " [ 5.79505205e-01]\n",
      " [ 5.19871460e-01]\n",
      " [ 6.69632206e-02]\n",
      " [-1.10941870e+00]\n",
      " [-3.78250183e-01]\n",
      " [ 2.46036086e+00]\n",
      " [-4.90507725e-01]\n",
      " [-2.06043086e+00]\n",
      " [ 4.27383899e+00]\n",
      " [-3.90043691e-01]\n",
      " [ 1.15108400e+00]\n",
      " [ 1.93329453e-02]\n",
      " [ 1.62980099e+00]\n",
      " [ 4.76659153e-01]\n",
      " [-1.12593299e+00]\n",
      " [-2.30982924e-01]\n",
      " [-2.30172730e+00]\n",
      " [ 2.28432481e+00]\n",
      " [ 1.46882092e+00]\n",
      " [ 3.38596432e+00]\n",
      " [ 9.23215325e-01]\n",
      " [ 1.71807389e+00]\n",
      " [-6.30401881e-01]\n",
      " [ 2.16494782e+00]\n",
      " [ 4.52956907e+00]\n",
      " [ 3.10086450e+00]\n",
      " [ 7.42207273e-01]\n",
      " [-2.20482602e+00]\n",
      " [-1.67635383e+00]\n",
      " [-1.19305091e+00]\n",
      " [-9.60429610e-01]\n",
      " [ 2.79657492e+00]\n",
      " [-1.09838330e-01]\n",
      " [-1.81282224e+00]\n",
      " [ 6.59021891e-01]\n",
      " [-8.94382705e-01]\n",
      " [-5.66289445e-01]\n",
      " [-6.78909600e-01]\n",
      " [ 1.74465215e+00]\n",
      " [-9.33360053e-01]\n",
      " [ 6.47166029e-01]\n",
      " [ 5.37717463e-01]\n",
      " [ 4.75529443e-01]\n",
      " [-2.70226774e+00]\n",
      " [ 3.47304551e-01]\n",
      " [ 1.62411857e+00]\n",
      " [ 1.36154544e+00]\n",
      " [-1.27827342e-01]\n",
      " [ 4.27106217e-01]\n",
      " [-1.28739459e+00]\n",
      " [ 2.80620802e+00]\n",
      " [-1.65554464e+00]\n",
      " [ 2.92267556e+00]\n",
      " [-4.20390628e-01]\n",
      " [ 8.46128086e-01]\n",
      " [-1.97393840e+00]\n",
      " [ 2.28611140e+00]\n",
      " [ 1.11808503e+00]\n",
      " [-1.51618330e+00]\n",
      " [-1.16538100e+00]\n",
      " [-1.38261959e+00]\n",
      " [ 7.35007551e-01]\n",
      " [-6.09154791e-01]\n",
      " [-2.07643572e+00]\n",
      " [-1.34920024e-01]\n",
      " [ 9.89494013e-01]\n",
      " [-1.09095886e+00]\n",
      " [-3.52718854e+00]\n",
      " [-1.41923369e-01]\n",
      " [-2.22326108e+00]\n",
      " [-3.56236758e+00]\n",
      " [-1.49681567e+00]\n",
      " [ 1.02820946e+00]\n",
      " [ 1.68788908e-01]\n",
      " [ 1.71614442e-01]\n",
      " [ 1.77971064e+00]\n",
      " [-5.71245796e-01]\n",
      " [-4.64299970e-01]\n",
      " [-3.45129455e-01]\n",
      " [-1.11196574e+00]\n",
      " [ 4.58167317e-02]\n",
      " [ 1.02559629e+00]\n",
      " [ 4.28750710e-01]\n",
      " [-1.80596549e+00]\n",
      " [ 1.35455937e+00]\n",
      " [ 2.20293388e+00]\n",
      " [-7.11461649e-01]\n",
      " [ 7.62957080e-01]\n",
      " [-1.35579955e+00]\n",
      " [-4.67378089e-01]\n",
      " [-1.47529918e+00]\n",
      " [-1.12637213e+00]\n",
      " [ 3.64233734e+00]\n",
      " [ 4.01271625e-01]\n",
      " [-5.16093525e-02]\n",
      " [ 5.57609643e+00]\n",
      " [-1.14824243e+00]\n",
      " [ 1.70386826e-01]\n",
      " [ 1.89237003e+00]\n",
      " [ 1.74400310e+00]\n",
      " [-5.92871371e-01]\n",
      " [ 1.74851068e+00]\n",
      " [ 1.78300731e+00]\n",
      " [ 2.73688530e+00]\n",
      " [-5.44653378e+00]\n",
      " [-2.34937187e+00]\n",
      " [ 1.12089622e+00]\n",
      " [ 5.12433202e+00]\n",
      " [ 3.07281001e+00]\n",
      " [-1.28875406e+00]\n",
      " [ 1.02692749e-01]\n",
      " [-8.54526355e-01]\n",
      " [-4.17940288e+00]\n",
      " [-2.39030595e-01]\n",
      " [-5.85102923e-01]\n",
      " [ 2.62283008e+00]\n",
      " [ 1.02563800e+00]\n",
      " [ 2.90970676e+00]\n",
      " [ 1.11402601e+00]\n",
      " [-3.88483039e+00]\n",
      " [ 3.63648204e-01]\n",
      " [-9.43043301e-01]\n",
      " [ 2.40288175e+00]\n",
      " [-2.29314405e+00]\n",
      " [ 5.46656719e-01]\n",
      " [-1.98557581e+00]\n",
      " [ 2.38468360e+00]\n",
      " [ 1.39597147e+00]\n",
      " [-2.02303705e-01]\n",
      " [-5.16784365e+00]\n",
      " [-1.88729111e+00]\n",
      " [-4.76889804e-01]\n",
      " [ 2.77994099e-01]\n",
      " [ 4.64252059e-01]\n",
      " [-1.75737866e+00]\n",
      " [-4.22574784e-02]\n",
      " [ 1.49784768e+00]\n",
      " [ 1.01778838e+00]\n",
      " [ 3.03236102e+00]\n",
      " [ 1.83856173e+00]\n",
      " [-1.07001728e+00]\n",
      " [-2.61995314e+00]\n",
      " [-2.10921219e+00]\n",
      " [-2.28256740e+00]\n",
      " [ 3.24025107e+00]\n",
      " [ 7.96156933e-01]\n",
      " [ 1.57026656e+00]\n",
      " [ 2.86173419e+00]\n",
      " [-4.38384468e-02]\n",
      " [ 3.07172983e-02]\n",
      " [ 1.80874790e+00]\n",
      " [-1.04290668e+00]\n",
      " [ 3.98006392e-01]\n",
      " [ 1.53034452e+00]\n",
      " [-1.82179816e+00]\n",
      " [ 1.03604415e+00]\n",
      " [-2.67551271e+00]\n",
      " [ 8.18227762e-01]\n",
      " [ 1.96066406e+00]\n",
      " [-2.65995979e-02]\n",
      " [ 7.97009436e-01]\n",
      " [-3.44677667e-01]\n",
      " [-4.62560754e-02]\n",
      " [-8.26109275e-01]\n",
      " [ 1.70430712e+00]\n",
      " [ 4.11348273e-01]\n",
      " [ 6.23382492e-01]\n",
      " [ 2.70381945e+00]\n",
      " [ 2.49810805e+00]\n",
      " [-3.09520765e+00]\n",
      " [-2.17488313e+00]\n",
      " [ 2.00524045e+00]\n",
      " [ 1.32972616e+00]\n",
      " [ 3.17655261e+00]\n",
      " [ 1.26716772e+00]\n",
      " [ 1.23916282e+00]\n",
      " [ 6.75159325e-01]\n",
      " [-1.69643694e+00]\n",
      " [ 4.22733724e+00]\n",
      " [ 1.70035348e+00]\n",
      " [-2.73588104e+00]\n",
      " [-3.44309835e-01]\n",
      " [ 9.63049964e-01]\n",
      " [-1.40432367e+00]\n",
      " [ 9.98456728e-01]\n",
      " [-6.17951394e-01]\n",
      " [ 2.36805187e-01]\n",
      " [ 9.49028717e-01]\n",
      " [-3.18580162e-01]\n",
      " [ 7.28033033e-01]\n",
      " [-2.09930261e+00]\n",
      " [-3.19398809e-01]\n",
      " [-1.06274347e-01]\n",
      " [ 5.13844908e-01]\n",
      " [-1.80706841e+00]\n",
      " [-6.15471814e-01]\n",
      " [ 3.71194990e-01]\n",
      " [-8.50152108e-01]\n",
      " [ 1.44318720e-01]\n",
      " [-6.88368065e-01]\n",
      " [ 7.27552989e-02]\n",
      " [ 5.25387290e-01]\n",
      " [ 2.09121559e+00]\n",
      " [-4.66123649e-01]\n",
      " [-1.48112558e-01]\n",
      " [ 1.10341227e+00]\n",
      " [ 9.12913436e-01]\n",
      " [ 2.39160023e-01]\n",
      " [-1.51324494e+00]\n",
      " [ 4.20384664e-01]\n",
      " [ 1.38055468e+00]\n",
      " [-3.44299063e+00]\n",
      " [-1.38166776e+00]\n",
      " [-5.35146626e-01]\n",
      " [ 1.18733595e+00]\n",
      " [-6.75987608e-01]\n",
      " [-2.33762385e-02]\n",
      " [ 1.75785892e+00]\n",
      " [ 1.38741215e+00]\n",
      " [ 1.67927404e+00]\n",
      " [-8.55177729e-01]\n",
      " [ 1.04071681e+00]\n",
      " [-3.13459901e-01]\n",
      " [-4.97239881e-01]\n",
      " [ 2.29345563e-01]\n",
      " [-1.71371197e+00]\n",
      " [-8.43357779e-01]\n",
      " [-9.87852735e-01]\n",
      " [-5.74790268e-01]\n",
      " [-2.95414892e-01]\n",
      " [-1.03375658e+00]\n",
      " [ 1.11811977e+00]\n",
      " [ 1.14691563e+00]\n",
      " [ 3.43884157e-01]\n",
      " [ 9.46722027e-01]\n",
      " [ 1.22077707e+00]\n",
      " [-1.24912076e+00]\n",
      " [ 6.47902070e-01]\n",
      " [ 1.94469879e-01]\n",
      " [ 1.25907244e+00]\n",
      " [-8.20214120e-02]\n",
      " [ 3.39733239e+00]\n",
      " [-2.19433999e+00]\n",
      " [-1.38708572e+00]\n",
      " [ 1.35050137e+00]\n",
      " [-1.63163934e+00]\n",
      " [ 2.79845021e+00]\n",
      " [-1.40355915e+00]\n",
      " [ 2.80963913e-01]\n",
      " [ 1.10121283e+00]\n",
      " [-2.24872889e+00]\n",
      " [ 6.88349326e-01]\n",
      " [ 2.80963440e-01]\n",
      " [ 4.38673157e-01]\n",
      " [ 3.83003378e-01]\n",
      " [ 5.66243058e-01]\n",
      " [-6.89164557e-02]\n",
      " [ 1.74221676e+00]\n",
      " [-9.63088348e-02]\n",
      " [-5.42940287e-01]\n",
      " [ 9.82783016e-01]\n",
      " [-1.17018035e+00]\n",
      " [ 1.79389667e+00]\n",
      " [-1.27303572e+00]\n",
      " [-9.04933293e-01]\n",
      " [ 4.03027707e-02]\n",
      " [ 1.80992602e-01]\n",
      " [ 1.08223749e-01]\n",
      " [-1.28754078e+00]\n",
      " [-5.96987503e-01]\n",
      " [-9.95115329e-01]\n",
      " [-1.77790604e+00]\n",
      " [ 1.50434943e+00]\n",
      " [-1.63286697e+00]\n",
      " [ 4.45879341e-01]\n",
      " [ 1.64106375e+00]\n",
      " [ 1.23242254e-01]\n",
      " [ 2.42123836e+00]\n",
      " [-1.58748272e+00]\n",
      " [-8.66593170e-01]\n",
      " [-2.25929095e+00]\n",
      " [-8.49080074e-01]\n",
      " [ 5.88771370e-01]\n",
      " [ 9.05835506e-01]\n",
      " [-4.11287025e-01]\n",
      " [-6.19813787e-01]\n",
      " [-2.07716725e-01]\n",
      " [-3.41654393e+00]\n",
      " [-7.18173400e-01]\n",
      " [-9.39769950e-01]\n",
      " [-4.07059017e-01]\n",
      " [ 3.34665514e+00]\n",
      " [ 7.22613674e-01]\n",
      " [ 1.04191676e+00]\n",
      " [-1.89747377e+00]\n",
      " [ 1.26020398e+00]\n",
      " [-1.43012571e+00]\n",
      " [ 2.36112558e-01]\n",
      " [ 1.44755902e+00]\n",
      " [-3.67157332e+00]\n",
      " [ 2.59057878e-01]\n",
      " [ 2.12471488e+00]\n",
      " [-5.07145230e+00]\n",
      " [ 2.34800925e+00]\n",
      " [-1.86936256e-01]\n",
      " [ 7.24800043e-01]\n",
      " [-2.06100007e+00]\n",
      " [-2.27516577e+00]\n",
      " [ 1.07510433e+00]\n",
      " [-4.09670678e-01]\n",
      " [ 5.21822258e-01]\n",
      " [-1.80487938e+00]\n",
      " [-2.60831538e+00]\n",
      " [ 2.16618398e+00]\n",
      " [ 4.38638696e-01]\n",
      " [-1.80836597e+00]\n",
      " [ 3.72991636e-01]\n",
      " [ 9.63901525e-01]\n",
      " [-2.31844554e+00]\n",
      " [-1.31393208e+00]\n",
      " [ 2.03206111e+00]\n",
      " [-4.06967733e+00]\n",
      " [-1.70128516e+00]\n",
      " [ 1.72254088e+00]\n",
      " [ 4.65146233e-01]\n",
      " [-2.42332839e+00]\n",
      " [-4.72238399e-01]\n",
      " [-6.08468375e-01]\n",
      " [-2.36037241e+00]\n",
      " [-3.24564745e-01]\n",
      " [ 8.26249854e-01]\n",
      " [-3.75999166e-01]\n",
      " [-3.26667086e-01]\n",
      " [-5.22406106e-01]\n",
      " [-8.08501039e-01]\n",
      " [ 3.11324078e+00]\n",
      " [-1.84031051e+00]\n",
      " [ 1.99369995e+00]\n",
      " [-2.72057948e+00]\n",
      " [-2.40958971e+00]\n",
      " [ 2.50485014e+00]\n",
      " [ 5.47335862e-01]\n",
      " [ 2.38129700e+00]\n",
      " [ 1.08887695e+00]\n",
      " [-3.54943981e+00]\n",
      " [ 3.27854391e+00]\n",
      " [ 1.76193772e+00]\n",
      " [-2.33827891e+00]\n",
      " [ 2.59217682e+00]\n",
      " [ 1.85685833e+00]\n",
      " [ 8.83801722e-01]\n",
      " [-1.29802933e-03]\n",
      " [ 2.79101915e+00]\n",
      " [ 1.61049425e+00]\n",
      " [ 6.54624843e-01]\n",
      " [ 9.77787978e-01]\n",
      " [ 3.00734688e+00]\n",
      " [-1.48572338e+00]\n",
      " [-2.96012670e-01]\n",
      " [ 1.59667689e+00]\n",
      " [ 8.51233977e-01]\n",
      " [ 3.47001780e-01]\n",
      " [ 6.06081213e-01]\n",
      " [-1.39543967e+00]\n",
      " [-1.31417254e+00]\n",
      " [-1.65593340e-02]\n",
      " [ 1.92801990e-01]\n",
      " [ 2.11240554e+00]\n",
      " [ 8.64300605e-01]\n",
      " [ 1.82742668e+00]\n",
      " [-9.27692964e-01]\n",
      " [ 5.65239772e-01]\n",
      " [-8.88522651e-01]\n",
      " [-4.51912070e-01]\n",
      " [ 7.92776353e-01]\n",
      " [-2.82646499e-01]\n",
      " [-7.36845070e-01]\n",
      " [ 4.75262609e-02]\n",
      " [-1.02263142e+00]\n",
      " [-6.49274244e-01]\n",
      " [-8.52467948e-01]\n",
      " [-2.26566652e+00]\n",
      " [ 1.15382179e+00]\n",
      " [ 3.62840707e+00]\n",
      " [ 1.48369745e+00]\n",
      " [ 9.77017152e-01]\n",
      " [ 1.47308542e+00]\n",
      " [ 3.33441790e+00]\n",
      " [-1.49375844e+00]\n",
      " [ 7.41377504e-01]\n",
      " [-1.95905333e+00]\n",
      " [-1.79842979e+00]\n",
      " [-1.75606204e+00]\n",
      " [-2.61665290e+00]\n",
      " [ 1.88397265e-01]\n",
      " [ 1.17067057e+00]\n",
      " [-2.11753149e+00]\n",
      " [-1.52084251e-01]\n",
      " [-2.78480606e+00]\n",
      " [-1.26457530e+00]\n",
      " [-1.68731398e+00]\n",
      " [-3.66036151e-01]\n",
      " [-3.11313038e+00]\n",
      " [ 2.17916347e+00]\n",
      " [-2.13576640e+00]\n",
      " [-1.14935540e-01]\n",
      " [ 2.46289618e+00]\n",
      " [-1.74945829e+00]\n",
      " [-1.56602350e+00]\n",
      " [ 4.98023787e-01]\n",
      " [-6.20821823e-01]\n",
      " [ 6.80181945e-01]\n",
      " [ 1.71535454e-01]\n",
      " [-5.47494905e-01]\n",
      " [-7.36803853e-01]\n",
      " [-2.59720704e+00]\n",
      " [ 2.82570600e+00]\n",
      " [-5.70512930e-02]\n",
      " [ 3.40589179e+00]\n",
      " [-3.02839451e+00]\n",
      " [ 1.84860098e+00]\n",
      " [ 2.69631673e+00]\n",
      " [-4.13600311e-01]\n",
      " [-1.77765135e+00]\n",
      " [-1.97328948e+00]\n",
      " [ 2.95861423e-01]\n",
      " [-1.34007426e+00]\n",
      " [-4.52250442e-01]\n",
      " [ 1.12726927e+00]\n",
      " [ 2.25077886e-01]\n",
      " [ 9.44749241e-01]\n",
      " [-2.93084150e-01]\n",
      " [ 2.46473545e+00]\n",
      " [-1.31083489e+00]\n",
      " [ 7.07946458e-01]\n",
      " [-4.84962388e-01]\n",
      " [-3.73633751e-02]\n",
      " [-6.21184925e-01]\n",
      " [ 2.42635821e+00]\n",
      " [ 4.17971651e-01]\n",
      " [ 6.54325246e-01]\n",
      " [-7.77237433e-01]\n",
      " [ 2.35272118e-01]\n",
      " [-1.36217337e+00]\n",
      " [ 8.09513985e-01]\n",
      " [-1.26281361e+00]\n",
      " [-4.51727824e-01]\n",
      " [-4.31961457e+00]\n",
      " [-2.66954988e+00]\n",
      " [-3.37346655e-01]\n",
      " [-1.34738677e+00]\n",
      " [ 2.79997366e+00]\n",
      " [-1.23437507e+00]\n",
      " [-2.14847268e+00]\n",
      " [-1.64870337e+00]\n",
      " [ 3.76933693e-03]\n",
      " [ 1.34876002e+00]\n",
      " [ 8.61732828e-01]\n",
      " [ 2.72932446e+00]\n",
      " [ 1.17127558e+00]\n",
      " [ 2.49980775e+00]\n",
      " [-3.67601235e-01]\n",
      " [-3.27930402e+00]\n",
      " [-2.36800578e+00]\n",
      " [-4.06684220e-01]\n",
      " [-6.27255666e-01]\n",
      " [-1.53179416e+00]\n",
      " [-8.77559318e-03]\n",
      " [ 7.83064240e-01]\n",
      " [ 4.76786710e-01]\n",
      " [-1.73548357e+00]\n",
      " [ 1.22828801e+00]\n",
      " [ 2.29966079e+00]\n",
      " [ 6.07674268e-01]\n",
      " [-7.67073691e-01]\n",
      " [ 1.20516676e+00]\n",
      " [ 7.97844668e-01]\n",
      " [ 1.25847739e+00]\n",
      " [-3.25265996e+00]\n",
      " [ 2.95473034e-01]\n",
      " [-8.74721146e-01]\n",
      " [ 1.18604011e+00]\n",
      " [ 1.05283237e+00]\n",
      " [-2.56715960e-01]\n",
      " [-3.47446814e+00]\n",
      " [-1.85706741e+00]\n",
      " [ 3.06222773e+00]\n",
      " [ 7.37787988e-02]\n",
      " [ 8.01168049e-01]\n",
      " [-2.14410586e+00]\n",
      " [ 2.46373437e+00]\n",
      " [-4.20304828e-01]\n",
      " [ 7.16531534e-01]\n",
      " [-3.93402339e+00]\n",
      " [ 2.40466653e+00]\n",
      " [-1.34303582e-01]\n",
      " [ 7.97865579e-01]\n",
      " [-1.79823153e+00]\n",
      " [-2.31923581e+00]\n",
      " [ 2.03924572e+00]\n",
      " [-9.27123043e-01]\n",
      " [ 9.48534302e-01]\n",
      " [ 1.73653909e+00]\n",
      " [ 9.32222462e-01]\n",
      " [ 2.80690040e-01]\n",
      " [-4.40429973e+00]\n",
      " [-2.00778961e+00]\n",
      " [ 3.23335540e+00]\n",
      " [ 1.69908933e-01]\n",
      " [ 1.07845716e+00]\n",
      " [-1.41079779e-01]\n",
      " [ 6.18422650e-01]\n",
      " [ 1.86142282e+00]\n",
      " [-1.97121181e+00]\n",
      " [-1.05741195e+00]\n",
      " [-1.23847330e+00]\n",
      " [ 1.75224785e+00]\n",
      " [ 1.88985417e+00]\n",
      " [-2.69148854e+00]\n",
      " [ 2.37674803e-01]\n",
      " [ 1.86595902e-01]\n",
      " [ 4.86298942e-01]\n",
      " [ 2.42239813e+00]\n",
      " [-2.62425305e+00]\n",
      " [-2.69892765e+00]\n",
      " [ 7.62917555e-01]\n",
      " [ 1.22424425e+00]\n",
      " [ 1.91838284e+00]\n",
      " [-1.20133025e+00]\n",
      " [-1.00230192e+00]\n",
      " [ 2.49658688e-01]\n",
      " [-8.76428114e-01]\n",
      " [ 4.40019462e-01]\n",
      " [-1.70035098e+00]\n",
      " [-2.40235622e+00]\n",
      " [ 6.16707885e-01]\n",
      " [ 7.47197811e-01]\n",
      " [ 1.88259378e+00]\n",
      " [-1.25363641e-01]\n",
      " [ 7.30862291e-02]\n",
      " [-1.86521330e+00]\n",
      " [ 1.06030684e+00]\n",
      " [-9.58706411e-01]\n",
      " [-2.41819053e+00]\n",
      " [ 9.06230130e-01]\n",
      " [-1.53847900e+00]\n",
      " [-1.69596553e-01]\n",
      " [ 4.25284470e-01]\n",
      " [-1.11415654e+00]\n",
      " [ 2.93565709e+00]\n",
      " [ 1.92623667e-01]\n",
      " [ 1.38109678e+00]\n",
      " [ 1.57531054e+00]\n",
      " [ 1.55217685e+00]\n",
      " [ 7.12361752e-01]\n",
      " [ 9.32850536e-01]\n",
      " [ 2.68514127e+00]\n",
      " [ 5.01020927e-02]\n",
      " [ 2.63649830e+00]\n",
      " [-5.38135110e-01]\n",
      " [-7.07181272e-01]\n",
      " [ 9.67536020e-01]\n",
      " [-2.78574107e+00]\n",
      " [-1.55204590e+00]\n",
      " [-2.86845621e+00]\n",
      " [ 3.55393542e-01]\n",
      " [ 2.30220406e+00]\n",
      " [-9.81297623e-01]\n",
      " [-1.66412371e+00]\n",
      " [ 3.24627333e+00]\n",
      " [ 7.39922817e-01]\n",
      " [-7.56830798e-01]\n",
      " [ 1.22928963e+00]\n",
      " [-7.33368584e-01]\n",
      " [ 1.23212113e+00]\n",
      " [-1.28650494e-01]\n",
      " [ 2.50215584e+00]\n",
      " [ 5.16339813e-02]\n",
      " [-4.32051648e+00]\n",
      " [-1.07495847e+00]\n",
      " [ 2.54902550e+00]\n",
      " [-2.09738510e+00]\n",
      " [ 3.16085381e+00]\n",
      " [-1.96530881e+00]\n",
      " [ 2.23539303e+00]\n",
      " [-1.05771472e+00]\n",
      " [-9.68946299e-01]\n",
      " [-1.25938151e+00]\n",
      " [ 4.18706828e-01]\n",
      " [ 2.47859433e+00]\n",
      " [ 1.71988262e+00]\n",
      " [ 3.90182036e+00]\n",
      " [-2.41497576e-01]\n",
      " [-2.47902320e+00]\n",
      " [ 1.56810072e+00]\n",
      " [-1.40327186e+00]\n",
      " [-1.36358194e+00]\n",
      " [ 9.38910677e-01]\n",
      " [ 7.62843279e-01]\n",
      " [-6.04873185e-02]\n",
      " [-5.03374244e+00]\n",
      " [ 3.86843532e-01]\n",
      " [ 3.05849359e+00]\n",
      " [ 1.20966516e+00]\n",
      " [ 5.56806487e-01]\n",
      " [-2.41080045e+00]\n",
      " [-4.37390651e-01]\n",
      " [-8.20870525e-01]\n",
      " [ 1.47509974e+00]\n",
      " [ 1.30173806e+00]\n",
      " [ 7.50506951e-01]\n",
      " [ 2.31408441e+00]\n",
      " [-1.89605674e+00]\n",
      " [-2.03330435e+00]\n",
      " [-1.41431265e+00]\n",
      " [-1.84617606e+00]\n",
      " [ 5.63345560e-02]\n",
      " [-1.23696151e-01]\n",
      " [-1.59565171e+00]\n",
      " [ 1.42792946e+00]\n",
      " [-2.03672420e+00]\n",
      " [ 1.17879420e+00]\n",
      " [-1.28309550e+00]\n",
      " [-1.53971833e+00]\n",
      " [ 8.03997065e-02]\n",
      " [ 2.15611820e+00]\n",
      " [ 6.09946441e-01]\n",
      " [-9.02965533e-02]\n",
      " [ 1.32880436e+00]\n",
      " [-1.05268895e+00]\n",
      " [ 4.73860496e+00]\n",
      " [-1.83197623e+00]\n",
      " [ 1.21781618e+00]\n",
      " [ 2.05645119e+00]\n",
      " [-6.67562139e-02]\n",
      " [-1.85148663e-01]\n",
      " [-2.38129448e+00]\n",
      " [-9.54570119e-01]\n",
      " [ 2.07300378e+00]\n",
      " [ 1.26543445e+00]\n",
      " [ 1.11210073e+00]\n",
      " [-9.39844563e-01]\n",
      " [ 1.60641862e+00]\n",
      " [-3.94478734e-01]\n",
      " [ 1.62558684e+00]\n",
      " [-6.89618554e-01]\n",
      " [-1.71597759e+00]\n",
      " [-2.12898551e+00]\n",
      " [-2.22647626e+00]\n",
      " [ 3.16509371e-01]\n",
      " [-1.54171112e+00]\n",
      " [ 1.85164389e-01]\n",
      " [-2.94293943e+00]\n",
      " [-2.80202806e+00]\n",
      " [-2.14267990e+00]\n",
      " [ 4.44297535e-01]\n",
      " [ 1.33021957e+00]\n",
      " [-1.27007455e+00]\n",
      " [-1.81187889e+00]\n",
      " [-2.00408767e+00]\n",
      " [-2.78866710e+00]\n",
      " [ 2.61077985e+00]\n",
      " [-1.68818839e+00]\n",
      " [-3.42886326e+00]\n",
      " [-2.32578349e+00]\n",
      " [ 3.19557812e-01]\n",
      " [-4.82576149e-02]\n",
      " [ 1.72732091e+00]\n",
      " [ 2.82751419e+00]\n",
      " [-2.32313078e+00]\n",
      " [-1.24901359e+00]\n",
      " [ 9.00062101e-01]\n",
      " [ 1.54088291e+00]\n",
      " [-1.54299587e+00]\n",
      " [-1.49774022e+00]\n",
      " [-6.32237850e-02]\n",
      " [-2.58174453e+00]\n",
      " [-8.85797208e-01]\n",
      " [ 1.63897623e+00]\n",
      " [ 6.57907228e-01]\n",
      " [-5.63154780e-01]\n",
      " [ 4.61895650e-01]\n",
      " [ 1.14697160e+00]\n",
      " [-1.91077747e+00]\n",
      " [ 4.94030110e+00]\n",
      " [-1.37359603e+00]\n",
      " [-5.01662249e-01]\n",
      " [-5.89871235e-02]\n",
      " [-1.89787138e-01]]\n",
      "[[10.37044569 11.23955536]\n",
      " [10.55719313 11.54594665]\n",
      " [ 9.01323877  9.01282393]\n",
      " ...\n",
      " [ 9.32502753  9.52436704]\n",
      " [ 9.0946364   9.14637075]\n",
      " [ 9.16271152  9.2580597 ]]\n"
     ]
    }
   ],
   "source": [
    "from numpy import * \n",
    "\n",
    "def loadDataSet(fileName, delim='\\t'):\n",
    "    fr = open(fileName)\n",
    "    stringArr = [line.strip().split(delim) for line in fr.readlines()]\n",
    "#     print(stringArr)\n",
    "    datArr = [list(map(float, line)) for line in stringArr]\n",
    "    return mat(datArr)\n",
    "\n",
    "def pca(dataMat, topNfeat=9999999):\n",
    "    meanVals = mean(dataMat, axis=0)\n",
    "    print('meanVals:', meanVals)\n",
    "    meanRemoved = dataMat - meanVals\n",
    "    print('meanRemoved:', meanRemoved)\n",
    "    covMat = cov(meanRemoved, rowvar=0)\n",
    "    print('covMat:', covMat)\n",
    "    eigVals, eigVects = linalg.eig(mat(covMat))\n",
    "    print('eigVals:', eigVals)\n",
    "    print('eigVects:', eigVects)\n",
    "    eigValInd = argsort(eigVals)\n",
    "    print('eigValInd:',eigValInd, type(eigValInd))\n",
    "    eigValInd = eigValInd[:-(topNfeat+1):-1]\n",
    "    print('eigValInd:',eigValInd)\n",
    "    redEigVects = eigVects[:, eigValInd]\n",
    "    print('redEigVects:', redEigVects)\n",
    "    lowDDataMat = meanRemoved * redEigVects\n",
    "    print(lowDDataMat)\n",
    "    reconMat = (lowDDataMat * redEigVects.T) + meanVals\n",
    "    print(reconMat)\n",
    "    return lowDDataMat, reconMat\n",
    "\n",
    "\n",
    "dataMat = loadDataSet('testSet.txt')\n",
    "# print(dataMat)\n",
    "\n",
    "lowDMat, reconMat = pca(dataMat, 1)\n",
    "# lowDMat"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 5,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "[3]"
      ]
     },
     "execution_count": 5,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "[1,2,3][:-2:-1]"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 7,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "<matplotlib.collections.PathCollection at 0x84986a0>"
      ]
     },
     "execution_count": 7,
     "metadata": {},
     "output_type": "execute_result"
    },
    {
     "data": {
      "image/png": "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\n",
      "text/plain": [
       "<Figure size 432x288 with 1 Axes>"
      ]
     },
     "metadata": {
      "needs_background": "light"
     },
     "output_type": "display_data"
    }
   ],
   "source": [
    "import matplotlib \n",
    "import matplotlib.pyplot as plt\n",
    "\n",
    "fig = plt.figure()\n",
    "ax = fig.add_subplot(111)\n",
    "ax.scatter(dataMat[:, 0].flatten().A[0], dataMat[:,1].flatten().A[0], marker='^', s=90)\n",
    "ax.scatter(reconMat[:,0].flatten().A[0], reconMat[:,1].flatten().A[0], marker='o', s=50, c='red')"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [],
   "source": []
  }
 ],
 "metadata": {
  "kernelspec": {
   "display_name": "Python 3",
   "language": "python",
   "name": "python3"
  },
  "language_info": {
   "codemirror_mode": {
    "name": "ipython",
    "version": 3
   },
   "file_extension": ".py",
   "mimetype": "text/x-python",
   "name": "python",
   "nbconvert_exporter": "python",
   "pygments_lexer": "ipython3",
   "version": "3.6.5"
  }
 },
 "nbformat": 4,
 "nbformat_minor": 2
}
